package ch10.test;

import java.util.LinkedList;

public class MyQueue {
	// 定义一个内部储存空间
	private LinkedList storage = new LinkedList();

	public void put(Object object) {
		storage.add(object);// add把数据保存到链表的后面
		// storage.addLast(object);addLast方法把数据保存到链表的后面，语义更明确
	}

	public Object get() {
		Object object = null;
		if (!storage.isEmpty()) {
			object = storage.get(0);//每次获取第一条数据
			// storage.remove(0);//获取后需要从队列移除该数据
			storage.remove(object);// 功能与storage.remove(0)相同
			
			// storage.pollFirst();//调用LinkedList的队列功能，功能与前行代码一致

		}
		return object;// 在定义方法骨架时，返回值一般为类型的默认值
	}

	public boolean isEmpty() {
		return storage.isEmpty();
	}
	
	public static void main(String[] args) {
		//已知功能，进行功能验证代码 ：针对单个功能进行测试 - 单元测试
		//1.读懂代码功能，理解代码 - 黑匣测试
		//2.设计用例：使用循环结构生成一批数据，并保存到队列中 - 模拟一批有序的数据
		//3.遍历集合，取出数据，并检查数据的顺序
		MyQueue queue = new MyQueue();
		for(int i=0;i<10;i++) {
			queue.put("data_"+i);
		}
		
		Object obj = null;
		while ((obj=queue.get())!=null) {
			System.out.println(obj);
			if(queue.isEmpty()) {
				System.out.println("数据已经获取完毕，队列清空");
			}
		}
	}

}
